R u Ready? HS2025 | Psychologie der Digitalisierung - Einheit 7

Sandra Grinschgl, Aaron Friedli, Lars Schilling

R u Ready? Reproduzierbare Datenaufbereitung und -analyse mit R

HS 2025


LV-Leitung: Dr. Sandra Grinschgl / MSc. Aaron Friedli
Tutor: BSc. Lars Schilling


7. Einheit, 29.10.2025

Heute:

Fragen zu Hands On Block 2?

Pipe:

  • Aus dem magrittr-Package %>% (Teil des tidyverse) oder Base R |>
  • Zweck: Macht Code leserlicher und verständlicher
  • Hilft bei Funktionen, die als erstes Argument Daten erwarten

Pipe: Beispiel

👎Unübersichtliche verschachtelte Funktion

library(palmerpenguins)
library(tidyverse)

head(select(filter(penguins, species == "Adelie"), species, bill_length_mm))

👍 Übersichtlich und nachvollziehbar mit der Pipe

penguins |>  
  filter(species == "Adelie") |>  
  select(species, bill_length_mm) |>  
  head()
# A tibble: 6 × 2
  species bill_length_mm
  <fct>            <dbl>
1 Adelie            39.1
2 Adelie            39.5
3 Adelie            40.3
4 Adelie            NA  
5 Adelie            36.7
6 Adelie            39.3

Tidyverse: dplyr

Bietet und einige der wichtigsten Funktionen für die Datenaufbereitung!

Image 1 Image 2

dplyr: filter()

dplyr: filter()

Filtert den Datensatz basierend auf den logischen Argumenten die wir geben.

  • Rows (Zeilen) auswählen
library(palmerpenguins)

penguins |> 
  filter(species == "Gentoo")
# A tibble: 124 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
 1 Gentoo  Biscoe           46.1          13.2               211        4500
 2 Gentoo  Biscoe           50            16.3               230        5700
 3 Gentoo  Biscoe           48.7          14.1               210        4450
 4 Gentoo  Biscoe           50            15.2               218        5700
 5 Gentoo  Biscoe           47.6          14.5               215        5400
 6 Gentoo  Biscoe           46.5          13.5               210        4550
 7 Gentoo  Biscoe           45.4          14.6               211        4800
 8 Gentoo  Biscoe           46.7          15.3               219        5200
 9 Gentoo  Biscoe           43.3          13.4               209        4400
10 Gentoo  Biscoe           46.8          15.4               215        5150
# ℹ 114 more rows
# ℹ 2 more variables: sex <fct>, year <int>

dplyr: select()

  • Colums (Spalten) auswählen
# A tibble: 344 × 3
   species island    bill_length_mm
   <fct>   <fct>              <dbl>
 1 Adelie  Torgersen           39.1
 2 Adelie  Torgersen           39.5
 3 Adelie  Torgersen           40.3
 4 Adelie  Torgersen           NA  
 5 Adelie  Torgersen           36.7
 6 Adelie  Torgersen           39.3
 7 Adelie  Torgersen           38.9
 8 Adelie  Torgersen           39.2
 9 Adelie  Torgersen           34.1
10 Adelie  Torgersen           42  
# ℹ 334 more rows

dplyer: select ()

dplyr: select()

  • Mit Hilfsfunktionen wie starts_with
penguins |> 
  select(starts_with("bill"))
# A tibble: 344 × 2
   bill_length_mm bill_depth_mm
            <dbl>         <dbl>
 1           39.1          18.7
 2           39.5          17.4
 3           40.3          18  
 4           NA            NA  
 5           36.7          19.3
 6           39.3          20.6
 7           38.9          17.8
 8           39.2          19.6
 9           34.1          18.1
10           42            20.2
# ℹ 334 more rows

dplyr: select()

  • Ausschliessen mit -
penguins |> 
  select(-species, -island)
# A tibble: 344 × 6
   bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex     year
            <dbl>         <dbl>             <int>       <int> <fct>  <int>
 1           39.1          18.7               181        3750 male    2007
 2           39.5          17.4               186        3800 female  2007
 3           40.3          18                 195        3250 female  2007
 4           NA            NA                  NA          NA <NA>    2007
 5           36.7          19.3               193        3450 female  2007
 6           39.3          20.6               190        3650 male    2007
 7           38.9          17.8               181        3625 female  2007
 8           39.2          19.6               195        4675 male    2007
 9           34.1          18.1               193        3475 <NA>    2007
10           42            20.2               190        4250 <NA>    2007
# ℹ 334 more rows

dplyr: summarize()

  • Fasst Daten zusammen, indem Kennwerte (z. B. Mittelwerte) berechnet werden.

  • Reduziert viele Zeilen zu einer oder wenigen zusammengefassten Zeilen.

  • Wird oft mit group_by() kombiniert, um Kennwerte pro Gruppe zu berechnen.

penguins |> 
  summarise(
    mean_bill_length = mean(bill_length_mm, na.rm = TRUE),
    mean_flipper_length = mean(flipper_length_mm, na.rm = TRUE)
  )
# A tibble: 1 × 2
  mean_bill_length mean_flipper_length
             <dbl>               <dbl>
1             43.9                201.

dplyr: summarize()

dplyr: mutate()

  • Erstellt neue Variablen oder verändert Bestehende.

  • Behält alle Zeilen des ursprünglichen Datensatzes bei.

  • Wird oft genutzt, um berechnete Spalten hinzuzufügen (z. B. bill_to_flipper_ratio).
library(tidyverse)
library(palmerpenguins)

penguins_upgraded <- penguins |> 
  mutate(
    bill_to_flipper_ratio = bill_length_mm / flipper_length_mm,
    body_mass_kg = body_mass_g / 1000
  )

head(penguins_upgraded)
# A tibble: 6 × 10
  species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
1 Adelie  Torgersen           39.1          18.7               181        3750
2 Adelie  Torgersen           39.5          17.4               186        3800
3 Adelie  Torgersen           40.3          18                 195        3250
4 Adelie  Torgersen           NA            NA                  NA          NA
5 Adelie  Torgersen           36.7          19.3               193        3450
6 Adelie  Torgersen           39.3          20.6               190        3650
# ℹ 4 more variables: sex <fct>, year <int>, bill_to_flipper_ratio <dbl>,
#   body_mass_kg <dbl>

dplyr: mutate()

dplyr: group_by()

  • Teilt den Datensatz in Gruppen auf (z. B. nach species).

  • Verändert die Daten nicht, sondern markiert sie intern als gruppiert.

  • Bereitet Daten auf Aggregationen mit summarise() oder Berechnungen mit mutate() vor.

grouped_summary <- penguins |> 
  group_by(species) |> 
  summarise(
    mean_bill_length = mean(bill_length_mm, na.rm = TRUE),
    mean_flipper_length = mean(flipper_length_mm, na.rm = TRUE)
  )

grouped_summary
# A tibble: 3 × 3
  species   mean_bill_length mean_flipper_length
  <fct>                <dbl>               <dbl>
1 Adelie                38.8                190.
2 Chinstrap             48.8                196.
3 Gentoo                47.5                217.

dplyr: group_by()

Heute haben wir:

  • Die Pipe kennengelernt

  • Dplyr Funktionen (Teil des tidyverse) zur Datenaufbereitung kennengelernt

Hausübung

  • Bis 7.11.2025 (Freitag nach EH 8)

  • Alle Instruktionen auf der Website

  • Danach Peer Feedback (Instruktionen folgen in EH 8)